home *** CD-ROM | disk | FTP | other *** search
/ MacHack 2000 / MacHack 2000.toast / pc / The Hacks / SnoozeAlarm / SnoozeAlarm.cp < prev    next >
Encoding:
Text File  |  2000-06-23  |  4.5 KB  |  187 lines

  1. /****************************************************************************************
  2.     SnoozeAlarm.cp
  3.     
  4.     Copyright © 2000 Red Shed Software. All rights reserved.
  5.     by Jonathan 'Wolf' Rentzsch (jon@redshed.net)
  6.     
  7.     Commenter    Date                Comment
  8.     ---------    -----------------    -----------------------------------------------------
  9.     wolf        Mon, Mar 6, 2000    Created.
  10.     
  11.     ************************************************************************************/
  12.  
  13. #include    "SnoozeAlarm.h"
  14. #include    "require.h"
  15. #include    "QuitMessages.h"
  16. #include    "Flour.h"
  17. #include    "BetterBitStream.h"
  18.  
  19. using namespace Flour;
  20.  
  21. /**************************
  22. *    
  23. *    Classes
  24. *    
  25. **************************/
  26. #pragma mark    (Classes)
  27.  
  28. class    MyApp : public Application {
  29.     public:
  30.             virtual
  31.             void
  32.         Initialize();
  33.         
  34.             virtual
  35.             void
  36.         HandleMenuSelection(
  37.             Event    &event );
  38.         
  39.         /*    virtual
  40.             void
  41.         HandleKeyDown(
  42.             Event    &event );*/
  43. };
  44.  
  45. MyApp        gMyApp;
  46. Application    *gApp = &gMyApp;
  47.  
  48.     void
  49. MyEventTask(
  50.     EventTask    *task );
  51.  
  52. /****************************************************************************************
  53. *    
  54. *    Functions
  55. *    
  56. ****************************************************************************************/
  57. #pragma mark    -
  58. #pragma mark    (Functions)
  59.  
  60. /****************************************************************************************
  61.     Commenter    Date                Comment
  62.     ---------    -----------------    -----------------------------------------------------
  63.     wolf        Mon, Mar 6, 2000    Created.
  64.     
  65.     ************************************************************************************/
  66.  
  67.     void
  68. MyApp::Initialize()
  69. {
  70.     Application::Initialize();
  71.     
  72.     EventTask    *et = (EventTask*) NewPtr( sizeof( EventTask ) );
  73.     if( et ) {
  74.         InitializeEventTask( et );
  75.         et->proc = MyEventTask;
  76.         Boolean scheduled = ScheduleEventTask( et, kEventLoop );
  77.         Require( scheduled );
  78.     }
  79. }
  80.  
  81. /****************************************************************************************
  82.     Commenter    Date                Comment
  83.     ---------    -----------------    -----------------------------------------------------
  84.     wolf        Mon, Mar 6, 2000    Created.
  85.     
  86.     ************************************************************************************/
  87.  
  88.     void
  89. MyApp::HandleMenuSelection(
  90.     Event    &event )
  91. {
  92.     switch( event.GetMenu() ) {
  93.         case kAppleMenu:
  94.             switch( event.GetMenuItem() ) {
  95.                 case kAboutItem:
  96.                     Debugger();
  97.                     break;
  98.                 default:
  99.                     HandleAppleMenuSelection( event );
  100.             }
  101.             break;
  102.         case kFileMenu:
  103.             switch( event.GetMenuItem() ) {
  104.                 case kQuitItem:
  105.                     BeginQuitting();
  106.                     break;
  107.                 default:
  108.                     RequireSwitch( event.GetMenuItem() );
  109.             }
  110.             break;
  111.         //    The frontmost window should have handled all Edit menu events.
  112.         //case kEditMenu:
  113.         //    break;
  114.         default:
  115.             RequireSwitch( event.GetMenu() );
  116.     }
  117. }
  118.  
  119. /****************************************************************************************
  120.     Commenter    Date                Comment
  121.     ---------    -----------------    -----------------------------------------------------
  122.     wolf        Thu, Jun 22, 2000    Created.
  123.     
  124.     ***********************************************************************************
  125.  
  126.     void
  127. MyApp::HandleKeyDown(
  128.     Event    &event )
  129. {
  130.     Application::HandleKeyDown( event );
  131. }*/
  132.  
  133. /****************************************************************************************
  134.     Commenter    Date                Comment
  135.     ---------    -----------------    -----------------------------------------------------
  136.     wolf        Thu, Jun 22, 2000    Created.
  137.     
  138.     ************************************************************************************/
  139.  
  140.     void
  141. MyEventTask(
  142.     EventTask    *task )
  143. {
  144.     const    UInt32    kKeyMapSize = sizeof( KeyMap ) * 8;
  145.     
  146.     KeyMap    keys;
  147.     void    *bitStream = keys;
  148.     UInt32    bitPosition = 0, keyCount = 0;
  149.     
  150.     GetKeys( keys );
  151.     
  152.     while( bitPosition < kKeyMapSize ) {
  153.         if( GetBetterBitStream( &bitStream, &bitPosition ) )
  154.             ++keyCount;
  155.     }
  156.     
  157.     if( keyCount > 2 ) {
  158.         SndListHandle snd1 = (SndListHandle) Get1Resource( 'snd ', 128 );
  159.         SndListHandle snd2 = (SndListHandle) Get1Resource( 'snd ', 129 );
  160.         SndListHandle snd3 = (SndListHandle) Get1Resource( 'snd ', 130 );
  161.         
  162.         if( snd1 && snd2 && snd3 ) {
  163.             SndChannelPtr    chan = nil;
  164.             OSErr    err = SndNewChannel( &chan, sampledSynth, 0, nil );
  165.             if( !err ) {
  166.                 err = SndPlay( chan, snd1, false );
  167.                 err = SndPlay( chan, snd2, false );
  168.                 err = SndPlay( chan, snd3, false );
  169.             }
  170.             if( chan )
  171.                 err = SndDisposeChannel( chan, false );
  172.         }
  173.         if( snd1 )
  174.             ReleaseResource( (Handle) snd1 );
  175.         if( snd2 )
  176.             ReleaseResource( (Handle) snd2 );
  177.         if( snd3 )
  178.             ReleaseResource( (Handle) snd3 );
  179.     }
  180.     
  181.     /*Str255    n;
  182.     NumToString( keyCount, n );
  183.     SetMenuItemText( GetMenuHandle( kEditMenu ), 1, n );*/
  184.     
  185.     Boolean scheduled = ScheduleEventTask( task, 30  );
  186.     Require( scheduled );
  187. }